home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / libraries / bgui10a_update.lha / demos / bguidemo.c < prev    next >
C/C++ Source or Header  |  1994-10-23  |  67KB  |  1,209 lines

  1. ;/* Execute me to compile with DICE V3.0
  2. dcc bguidemo.c -proto -mi -ms -mRR -lbgui
  3. quit
  4. */
  5. /*
  6. **         $RCSfile: bguidemo.c,v $
  7. **      Description: A small demonstration.
  8. **        Copyright: (C) Copyright 1994 Jaba Development.
  9. **                   (C) Copyright 1994 Jan van den Baard.
  10. **                   All Rights Reserved.
  11. **
  12. **          $Author: jaba $
  13. **        $Revision: 1.13 $
  14. **            $Date: 1994/10/23 15:03:57 $
  15. **/
  16.  
  17. #include <exec/types.h>
  18. #include <exec/memory.h>
  19. #include <libraries/gadtools.h>
  20. #include <dos/dos.h>
  21. #include <graphics/gfxmacros.h>
  22. #include <workbench/workbench.h>
  23. #include <workbench/startup.h>
  24. #include <libraries/bgui.h>
  25. #include <libraries/bgui_macros.h>
  26.  
  27. #include <clib/alib_protos.h>
  28.  
  29. #include <proto/exec.h>
  30. #include <proto/intuition.h>
  31. #include <proto/dos.h>
  32. #include <proto/bgui.h>
  33. #include <proto/graphics.h>
  34.  
  35. #include <stdio.h>
  36.  
  37. /*
  38. **      Online-Help texts.
  39. **/
  40. UBYTE           *MainHelp               = ISEQ_C "BGUI is a shared library which offers a set of\n"
  41.                                           "BOOPSI classes to allow for easy and flexible GUI creation.\n\n"
  42.                                           "The main window is also an AppWindow. Drop some icons\n"
  43.                                           "on it and see what happens.\n\n"
  44.                                           "All other windows in this demo also have online-help. To access\n"
  45.                                           "this help press the " ISEQ_B "HELP" ISEQ_N " key when the window is active.";
  46.  
  47. UBYTE           *GroupsHelp             = ISEQ_C "The BGUI layout engine is encapsulated in the groupclass.\n"
  48.                                           "The groupclass will layout all of it's members into a specific area.\n"
  49.                                           "You can pass layout specific attributes to all group members\n"
  50.                                           "which allows for flexible and powerful layout capabilities.";
  51.  
  52. UBYTE           *NotifHelp              = ISEQ_C "Notification can be used to let an object keep one or\n"
  53.                                           "more other objects informed about it's status. BGUI offers several\n"
  54.                                           "kinds of notification of which two (conditional and map-list) are\n"
  55.                                           "shown in this demonstration.";
  56.  
  57. UBYTE           *InfoHelp               = ISEQ_C "Not much more can be said about the BGUI infoclass than\n"
  58.                                           "is said in this window. Except maybe that this text is shown in an\n"
  59.                                           "infoclass object as are all body texts from a BGUI requester.";
  60.  
  61. UBYTE           *ImageHelp              = ISEQ_C "This window shows you the built-in images that BGUI has\n"
  62.                                           "to offer. Ofcourse these images are all scalable and it is possible\n"
  63.                                           "to create your own, scalable, imagery with the BGUI vectorclass.";
  64.  
  65. UBYTE           *BackfillHelp           = ISEQ_C "Here you see the built-in backfill patterns BGUI supports.\n"
  66.                                           "These backfill patterns can all be used in groups and frames.\n"
  67.                                           "The frameclass also offers you the possibility to add hooks for\n"
  68.                                           "custom backfills and frame rendering.\n\n"
  69.                                           "The bottom frame shows you a custom backfill hook which renders a\n"
  70.                                           "small mandel instead of using a builtin backfill.";
  71.  
  72. UBYTE           *PagesHelp              = ISEQ_C "The pageclass allows you to setup a set of pages containing\n"
  73.                                           "BGUI gadgets or groups. This will give you the oppertunity to\n"
  74.                                           "have several set's of gadgets in a single window.";
  75.  
  76.  
  77. /*
  78. **      Window objects.
  79. **/
  80. Object          *WA_Main  = NULL, *WA_Groups = NULL, *WA_Notif = NULL;
  81. Object          *WA_Info  = NULL, *WA_Image  = NULL, *WA_BFill = NULL;
  82. Object          *WA_Pages = NULL;
  83.  
  84. /*
  85. **      Gadget objects from the main window.
  86. **/
  87. Object          *BT_Groups,   *BT_Notif,    *BT_Quit;
  88. Object          *BT_Info,     *BT_Images,   *BT_BFill;
  89. Object          *BT_Pages,    *BT_IconDone, *BT_IconQuit;
  90. Object          *LV_IconList, *PG_Pager;
  91.  
  92. /*
  93. **      Menus & gadget ID's.
  94. **/
  95. #define ID_ABOUT                1L
  96. #define ID_QUIT                 2L
  97.  
  98. /*
  99. **      A small menu strip.
  100. **/
  101. struct NewMenu MainMenus[] = {
  102.         Title( "Project" ),
  103.                 Item( "About...", "?", ID_ABOUT ),
  104.                 ItemBar,
  105.                 Item( "Quit",     "Q", ID_QUIT  ),
  106.         End
  107. };
  108.  
  109. /*
  110. **      Put up a simple requester.
  111. **/
  112. ULONG Req( struct Window *win, UBYTE *gadgets, UBYTE *body, ... )
  113. {
  114.         struct bguiRequest      req = { NULL };
  115.  
  116.         req.br_GadgetFormat     = gadgets;
  117.         req.br_TextFormat       = body;
  118.         req.br_Flags            = BREQF_CENTERWINDOW|BREQF_XEN_BUTTONS;
  119.  
  120.         return( BGUI_RequestA( win, &req, ( ULONG * )( &body + 1 )));
  121. }
  122.  
  123. /*
  124. **      Main window button ID's.
  125. **/
  126. #define ID_MAIN_GROUPS          3L
  127. #define ID_MAIN_NOTIF           4L
  128. #define ID_MAIN_INFO            5L
  129. #define ID_MAIN_IMAGE           6L
  130. #define ID_MAIN_BFILL           7L
  131. #define ID_MAIN_PAGES           8L
  132. #define ID_MAIN_ICON_CONT       9L
  133.  
  134. /*
  135. **      Open main window.
  136. **/
  137. struct Window *OpenMainWindow( ULONG *sigmask, ULONG *appmask )
  138. {
  139.         struct Window           *window = NULL;
  140.  
  141.         WA_Main = WindowObject,
  142.                 WINDOW_Title,           "BGUIDemo - (C) Jaba Development.",
  143.                 WINDOW_ScreenTitle,     "BGUIDemo - (C) Copyright 1993-1994 Jaba Development.",
  144.                 WINDOW_MenuStrip,       MainMenus,
  145.                 WINDOW_SmartRefresh,    TRUE,
  146.                 WINDOW_AppWindow,       TRUE,
  147.                 WINDOW_SizeGadget,      FALSE,
  148.                 WINDOW_HelpText,        MainHelp,
  149.                 WINDOW_MasterGroup,
  150.                         VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  151.                                 StartMember,
  152.                                         PG_Pager = PageObject,
  153.                                                 /*
  154.                                                 **      Main page.
  155.                                                 **/
  156.                                                 PageMember,
  157.                                                         VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  158.                                                                 StartMember,
  159.                                                                         InfoObject,
  160.                                                                                 INFO_TextFormat,        ISEQ_C
  161.                                                                                                         "BGUIDemo\n"
  162.                                                                                                         ISEQ_HIGHLIGHT
  163.                                                                                                         ISEQ_B
  164.                                                                                                         "(C) Copyright 1993-1994 Jaba Development"
  165.                                                                                                         ISEQ_TEXT
  166.                                                                                                         ISEQ_N
  167.                                                                                                         "\n\n"
  168.                                                                                                         "Press the HELP key for more info.",
  169.                                                                                 INFO_FixTextWidth,      TRUE,
  170.                                                                                 INFO_MinLines,          4,
  171.                                                                                 INFO_HorizOffset,       13,
  172.                                                                                 FRM_Type,               FRTYPE_NEXT,
  173.                                                                         EndObject,
  174.                                                                 EndMember,
  175.                                                                 StartMember,
  176.                                                                         HGroupObject, Spacing( 4 ),
  177.                                                                                 StartMember,
  178.                                                                                         VGroupObject, Spacing( 4 ),
  179.                                                                                                 StartMember, BT_Groups = XenKeyButton( "_Groups",       ID_MAIN_GROUPS ), EndMember,
  180.                                                                                                 StartMember, BT_Notif  = XenKeyButton( "_Notification", ID_MAIN_NOTIF  ), EndMember,
  181.                                                                                                 VarSpace( DEFAULT_WEIGHT ),
  182.                                                                                         EndObject,
  183.                                                                                 EndMember,
  184.                                                                                 StartMember,
  185.                                                                                         VGroupObject, Spacing( 4 ),
  186.                                                                                                 StartMember, BT_Images = XenKeyButton( "_Images",       ID_MAIN_IMAGE  ), EndMember,
  187.                                                                                                 StartMember, BT_BFill  = XenKeyButton( "_BackFill",     ID_MAIN_BFILL  ), EndMember,
  188.                                                                                                 StartMember, BT_Quit   = XenKeyButton( "_Quit",         ID_QUIT        ), EndMember,
  189.                                                                                         EndObject,
  190.                                                                                 EndMember,
  191.                                                                                 StartMember,
  192.                                                                                         VGroupObject, Spacing( 4 ),
  193.                                                                                                 StartMember, BT_Pages  = XenKeyButton( "_Pages",        ID_MAIN_PAGES  ), EndMember,
  194.                                                                                                 StartMember, BT_Info   = XenKeyButton( "Info_Class",    ID_MAIN_INFO   ), EndMember,
  195.                                                                                                 VarSpace( DEFAULT_WEIGHT ),
  196.                                                                                         EndObject,
  197.                                                                                 EndMember,
  198.                                                                         EndObject, FixMinHeight,
  199.                                                                 EndMember,
  200.                                                         EndObject,
  201.                                                 /*
  202.                                                 **      Icon-drop list page.
  203.                                                 **/
  204.                                                 PageMember,
  205.                                                         VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  206.                                                                 StartMember,
  207.                                                                         InfoObject,
  208.                                                                                 INFO_TextFormat,        ISEQ_C
  209.                                                                                                         "The following icons where dropped\n"
  210.                                                                                                         "in the window.",
  211.                                                                                 INFO_FixTextWidth,      TRUE,
  212.                                                                                 INFO_MinLines,          2,
  213.                                                                                 INFO_HorizOffset,       13,
  214.                                                                                 FRM_Type,               FRTYPE_BUTTON,
  215.                                                                                 FRM_Recessed,           TRUE,
  216.                                                                         EndObject, FixMinHeight,
  217.                                                                 EndMember,
  218.                                                                 StartMember,
  219.                                                                         LV_IconList = ListviewObject,
  220.                                                                                 LISTV_ReadOnly,         TRUE,
  221.                                                                         EndObject,
  222.                                                                 EndMember,
  223.                                                                 StartMember,
  224.                                                                         HGroupObject,
  225.                                                                                 StartMember, BT_IconDone = XenKeyButton( "_Continue", ID_MAIN_ICON_CONT ), EndMember,
  226.                                                                                 VarSpace( DEFAULT_WEIGHT ),
  227.                                                                                 StartMember, BT_IconQuit = XenKeyButton( "_Quit",     ID_QUIT ), EndMember,
  228.                                                                         EndObject, FixMinHeight,
  229.                                                                 EndMember,
  230.                                                         EndObject,
  231.                                         EndObject,
  232.                                 EndMember,
  233.                         EndObject,
  234.         EndObject;
  235.  
  236.         /*
  237.         **      Object created OK?
  238.         **/
  239.         if ( WA_Main ) {
  240.                 /*
  241.                 **      Add keys to the buttons.
  242.                 **/
  243.                 GadgetKey( WA_Main, BT_Groups,   "g" );
  244.                 GadgetKey( WA_Main, BT_Notif,    "n" );
  245.                 GadgetKey( WA_Main, BT_Info,     "c" );
  246.                 GadgetKey( WA_Main, BT_Images,   "i" );
  247.                 GadgetKey( WA_Main, BT_BFill,    "b" );
  248.                 GadgetKey( WA_Main, BT_Pages,    "p" );
  249.                 GadgetKey( WA_Main, BT_Quit,     "q" );
  250.                 GadgetKey( WA_Main, BT_IconDone, "c" );
  251.                 GadgetKey( WA_Main, BT_IconQuit, "q" );
  252.                 /*
  253.                 **      Open the window.
  254.                 **/
  255.                 if ( window = WindowOpen( WA_Main )) {
  256.                         /*
  257.                         **      Obtain signal masks.
  258.                         **/
  259.                         GetAttr( WINDOW_SigMask, WA_Main, sigmask );
  260.                         GetAttr( WINDOW_AppMask, WA_Main, appmask );
  261.                 }
  262.         }
  263.  
  264.         return( window );
  265. }
  266.  
  267. /*
  268. **      Macros for the group objects. GObj() creates
  269. **      a simple infoclass object with some text in
  270. **      it. TObj() creates a simple groupclass object
  271. **      with a button frame.
  272. **/
  273. #define GObj(t)\
  274.         InfoObject,\
  275.                 INFO_TextFormat,        t,\
  276.                 INFO_FixTextWidth,      TRUE,\
  277.                 INFO_HorizOffset,       4,\
  278.                 INFO_VertOffset,        3,\
  279.                 ButtonFrame,\
  280.                 FRM_Flags,              FRF_RECESSED,\
  281.         EndObject
  282.  
  283. #define TObj\
  284.         HGroupObject, HOffset( 3 ), VOffset( 2 ),\
  285.                 ButtonFrame,\
  286.                 FRM_Flags,              FRF_RECESSED,\
  287.         EndObject
  288.  
  289. /*
  290. **      Open up the groups window.
  291. **/
  292. struct Window *OpenGroupsWindow( ULONG *sigmask )
  293. {
  294.         struct Window                   *window = NULL;
  295.  
  296.         /*
  297.         **      If the object has not been created
  298.         **      already we build it.
  299.         **/
  300.         if ( ! WA_Groups ) {
  301.                 WA_Groups = WindowObject,
  302.                         WINDOW_Title,           "BGUI Groups",
  303.                         WINDOW_RMBTrap,         TRUE,
  304.                         WINDOW_SmartRefresh,    TRUE,
  305.                         WINDOW_HelpText,        GroupsHelp,
  306.                         WINDOW_MasterGroup,
  307.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  308.                                         StartMember,
  309.                                                 HGroupObject, Spacing( 4 ),
  310.                                                         StartMember,
  311.                                                                 HGroupObject, NeXTFrame, FrameTitle( "Horizontal" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  312.                                                                         StartMember, TObj, EndMember,
  313.                                                                         StartMember, TObj, EndMember,
  314.                                                                         StartMember, TObj, EndMember,
  315.                                                                 EndObject,
  316.                                                         EndMember,
  317.                                                         StartMember,
  318.                                                                 VGroupObject, NeXTFrame, FrameTitle( "Vertical" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  319.                                                                         StartMember, TObj, EndMember,
  320.                                                                         StartMember, TObj, EndMember,
  321.                                                                         StartMember, TObj, EndMember,
  322.                                                                 EndObject,
  323.                                                         EndMember,
  324.                                                         StartMember,
  325.                                                                 VGroupObject, NeXTFrame, FrameTitle( "Grid" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  326.                                                                         StartMember,
  327.                                                                                 HGroupObject, Spacing( 4 ),
  328.                                                                                         StartMember, TObj, EndMember,
  329.                                                                                         StartMember, TObj, EndMember,
  330.                                                                                         StartMember, TObj, EndMember,
  331.                                                                                 EndObject,
  332.                                                                         EndMember,
  333.                                                                         StartMember,
  334.                                                                                 HGroupObject, Spacing( 4 ),
  335.                                                                                         StartMember, TObj, EndMember,
  336.                                                                                         StartMember, TObj, EndMember,
  337.                                                                                         StartMember, TObj, EndMember,
  338.                                                                                 EndObject,
  339.                                                                         EndMember,
  340.                                                                         StartMember,
  341.                                                                                 HGroupObject, Spacing( 4 ),
  342.                                                                                         StartMember, TObj, EndMember,
  343.                                                                                         StartMember, TObj, EndMember,
  344.                                                                                         StartMember, TObj, EndMember,
  345.                                                                                 EndObject,
  346.                                                                         EndMember,
  347.                                                                 EndObject,
  348.                                                         EndMember,
  349.                                                 EndObject,
  350.                                         EndMember,
  351.                                         StartMember,
  352.                                                 VGroupObject, Spacing( 4 ),
  353.                                                         StartMember, TitleSeperator( "Free, Fixed and Weight sizes." ), EndMember,
  354.                                                         StartMember,
  355.                                                                 HGroupObject, Spacing( 4 ),
  356.                                                                         StartMember, GObj( ISEQ_C "25Kg"  ), Weight( 25  ), EndMember,
  357.                                                                         StartMember, GObj( ISEQ_C "50Kg"  ), Weight( 50  ), EndMember,
  358.                                                                         StartMember, GObj( ISEQ_C "75Kg"  ), Weight( 75  ), EndMember,
  359.                                                                         StartMember, GObj( ISEQ_C "100Kg" ), Weight( 100 ), EndMember,
  360.                                                                 EndObject,
  361.                                                         EndMember,
  362.                                                         StartMember,
  363.                                                                 HGroupObject, Spacing( 4 ),
  364.                                                                         StartMember, GObj( ISEQ_C "Free"  ), EndMember,
  365.                                                                         StartMember, GObj( "Fixed"        ), FixMinWidth, EndMember,
  366.                                                                         StartMember, GObj( ISEQ_C "Free"  ), EndMember,
  367.                                                                         StartMember, GObj( "Fixed"        ), FixMinWidth, EndMember,
  368.                                                                 EndObject,
  369.                                                         EndMember,
  370.                                                 EndObject, FixMinHeight,
  371.                                         EndMember,
  372.                                 EndObject,
  373.                 EndObject;
  374.         }
  375.  
  376.         /*
  377.         **      Object OK?
  378.         **/
  379.         if ( WA_Groups ) {
  380.                 /*
  381.                 **      Open the window.
  382.                 **/
  383.                 if ( window = WindowOpen( WA_Groups ))
  384.                         /*
  385.                         **      Obtain signal mask.
  386.                         **/
  387.                         GetAttr( WINDOW_SigMask, WA_Groups, sigmask );
  388.         }
  389.  
  390.         return( window );
  391. }
  392.  
  393. /*
  394. **      Cycle gadget labels.
  395. **/
  396. UBYTE   *NotifLabels[] = { "Enabled-->", "Disabled-->", "Still Disabled-->", NULL };
  397.  
  398. /*
  399. **      Notification map-lists.
  400. **/
  401. ULONG   pga2sl[] = { PGA_Top,       SLIDER_Level,  TAG_END };
  402. ULONG   sl2prg[] = { SLIDER_Level,  PROGRESS_Done, TAG_END };
  403. ULONG   prg2in[] = { PROGRESS_Done, INDIC_Level,   TAG_END };
  404.  
  405. /*
  406. **      Open the notification window.
  407. **/
  408. struct Window *OpenNotifWindow( ULONG *sigmask )
  409. {
  410.         struct Window                   *window = NULL;
  411.         Object                          *c, *b, *p1, *p2, *s1, *s2, *p, *i1, *i2;
  412.  
  413.         /*
  414.         **      Not created yet? Create it now!
  415.         **/
  416.         if ( ! WA_Notif ) {
  417.                 WA_Notif = WindowObject,
  418.                         WINDOW_Title,           "BGUI notification",
  419.                         WINDOW_RMBTrap,         TRUE,
  420.                         WINDOW_SmartRefresh,    TRUE,
  421.                         WINDOW_HelpText,        NotifHelp,
  422.                         WINDOW_MasterGroup,
  423.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  424.                                         StartMember, TitleSeperator( "Conditional" ), EndMember,
  425.                                         StartMember,
  426.                                                 HGroupObject, Spacing( 4 ),
  427.                                                         StartMember, c = XenCycle( NULL, NotifLabels, 0, 0 ), EndMember,
  428.                                                         StartMember, b = XenButton( "Target", 0 ), EndMember,
  429.                                                 EndObject, FixMinHeight,
  430.                                         EndMember,
  431.                                         StartMember, TitleSeperator( "Map-List" ), EndMember,
  432.                                         StartMember,
  433.                                                 HGroupObject, Spacing( 4 ),
  434.                                                         StartMember,
  435.                                                                 VGroupObject, Spacing( 4 ),
  436.                                                                         StartMember, i1 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  437.                                                                         StartMember, p1 = HorizProgress( NULL, 0, 100, 0 ), EndMember,
  438.                                                                 EndObject,
  439.                                                         EndMember,
  440.                                                         StartMember, s1 = VertSlider(   NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
  441.                                                         StartMember, p  = VertScroller( NULL, 0, 101, 1, 0 ), FixWidth( 16 ), EndMember,
  442.                                                         StartMember, s2 = VertSlider(   NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
  443.                                                         StartMember,
  444.                                                                 VGroupObject, Spacing( 4 ),
  445.                                                                         StartMember, i2 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  446.                                                                         StartMember, p2 = VertProgress( NULL, 0, 100, 0 ), EndMember,
  447.                                                                 EndObject,
  448.                                                         EndMember,
  449.                                                 EndObject,
  450.                                         EndMember,
  451.                                 EndObject,
  452.                 EndObject;
  453.  
  454.                 if ( WA_Notif ) {
  455.                         /*
  456.                         **      Connect the cycle object with the button.
  457.                         **/
  458.                         AddCondit( c, b, CYC_Active, 0, GA_Disabled, FALSE, GA_Disabled, TRUE );
  459.                         /*
  460.                         **      Connect sliders, prop, progression and indicators.
  461.                         **/
  462.                         AddMap( s1, p1, sl2prg );
  463.                         AddMap( s2, p2, sl2prg );
  464.                         AddMap( p,  s1, pga2sl );
  465.                         AddMap( p,  s2, pga2sl );
  466.                         AddMap( p1, i1, prg2in );
  467.                         AddMap( p2, i2, prg2in );
  468.                 }
  469.         }
  470.  
  471.         /*
  472.         **      Object OK?
  473.         **/
  474.         if ( WA_Notif ) {
  475.                         /*
  476.                         **      Open window.
  477.                         **/
  478.                         if ( window = WindowOpen( WA_Notif ))
  479.                                 /*
  480.                                 **      Obtain signal mask.
  481.                                 **/
  482.                                 GetAttr( WINDOW_SigMask, WA_Notif, sigmask );
  483.         }
  484.  
  485.         return( window );
  486. }
  487.  
  488. /*
  489. **      Open infoclass window.
  490. **/
  491. struct Window *OpenInfoWindow( ULONG *sigmask )
  492. {
  493.         struct Window                   *window = NULL;
  494.         ULONG                            args[2];
  495.  
  496.         /*
  497.         **      Setup arguments for the
  498.         **      infoclass object.
  499.         **/
  500.         args[0] = AvailMem( MEMF_CHIP );
  501.         args[1] = AvailMem( MEMF_FAST );
  502.  
  503.         /*
  504.         **      Not created already?
  505.         **/
  506.         if ( ! WA_Info ) {
  507.                 WA_Info = WindowObject,
  508.                         WINDOW_Title,           "BGUI information class",
  509.                         WINDOW_RMBTrap,         TRUE,
  510.                         WINDOW_SmartRefresh,    TRUE,
  511.                         WINDOW_HelpText,        InfoHelp,
  512.                         WINDOW_MasterGroup,
  513.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ),
  514.                                         StartMember,
  515.                                                 InfoFixed( NULL,
  516.                                                            ISEQ_C "BGUI offers the InfoClass.\n"
  517.                                                            "This class is a text display class which\n"
  518.                                                            "allows things like:\n\n"
  519.                                                            ISEQ_SHINE     "C"
  520.                                                            ISEQ_SHADOW    "o"
  521.                                                            ISEQ_FILL      "l"
  522.                                                            ISEQ_FILLTEXT  "o"
  523.                                                            ISEQ_HIGHLIGHT "r"
  524.                                                            ISEQ_TEXT      "s\n\n"
  525.                                                            ISEQ_L "Left Aligned...\n"
  526.                                                            ISEQ_R "Right Aligned...\n"
  527.                                                            ISEQ_C "Centered...\n\n"
  528.                                                            ISEQ_B "Bold...\n"   ISEQ_N
  529.                                                            ISEQ_I "Italic...\n" ISEQ_N
  530.                                                            ISEQ_U "Underlined...\n\n"
  531.                                                            ISEQ_B ISEQ_I "And combinations!\n\n"
  532.                                                            ISEQ_N "Free CHIP:" ISEQ_SHINE " %ld" ISEQ_TEXT", Free FAST:" ISEQ_SHINE " %ld\n",
  533.                                                            &args[ 0 ],
  534.                                                            17 ),
  535.                                         EndMember,
  536.                                 EndObject,
  537.                 EndObject;
  538.         }
  539.  
  540.         /*
  541.         **      Object OK?
  542.         **/
  543.         if ( WA_Info ) {
  544.                 /*
  545.                 **      Open window.
  546.                 **/
  547.                 if ( window = WindowOpen( WA_Info ))
  548.                         /*
  549.                         **      Obtain signal mask.
  550.                         **/
  551.                         GetAttr( WINDOW_SigMask, WA_Info, sigmask );
  552.         }
  553.  
  554.         return( window );
  555. }
  556.  
  557. /*
  558. **      Open images window.
  559. **/
  560. struct Window *OpenImageWindow( ULONG *sigmask )
  561. {
  562.         struct Window                   *window = NULL;
  563.  
  564.         /*
  565.         **      Not yet created?
  566.         **/
  567.         if ( ! WA_Image ) {
  568.                 WA_Image = WindowObject,
  569.                         WINDOW_Title,           "BGUI images",
  570.                         WINDOW_RMBTrap,         TRUE,
  571.                         WINDOW_SmartRefresh,    TRUE,
  572.                         WINDOW_HelpText,        ImageHelp,
  573.                         WINDOW_MasterGroup,
  574.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ),
  575.                                         StartMember,
  576.                                                 HGroupObject, NeXTFrame, FrameTitle( "Fixed size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  577.                                                         VarSpace( DEFAULT_WEIGHT ),
  578.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH,     ButtonFrame, EndObject, FixWidth( GETPATH_WIDTH     ), FixHeight( GETPATH_HEIGHT     ), EndMember,
  579.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE,     ButtonFrame, EndObject, FixWidth( GETFILE_WIDTH     ), FixHeight( GETFILE_HEIGHT     ), EndMember,
  580.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK,   ButtonFrame, EndObject, FixWidth( CHECKMARK_WIDTH   ), FixHeight( CHECKMARK_HEIGHT   ), EndMember,
  581.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP,       ButtonFrame, EndObject, FixWidth( POPUP_WIDTH       ), FixHeight( POPUP_HEIGHT       ), EndMember,
  582.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP,    ButtonFrame, EndObject, FixWidth( ARROW_UP_WIDTH    ), FixHeight( ARROW_UP_HEIGHT    ), EndMember,
  583.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN,  ButtonFrame, EndObject, FixWidth( ARROW_DOWN_WIDTH  ), FixHeight( ARROW_DOWN_HEIGHT  ), EndMember,
  584.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT,  ButtonFrame, EndObject, FixWidth( ARROW_LEFT_WIDTH  ), FixHeight( ARROW_LEFT_HEIGHT  ), EndMember,
  585.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, FixWidth( ARROW_RIGHT_WIDTH ), FixHeight( ARROW_RIGHT_HEIGHT ), EndMember,
  586.                                                         VarSpace( DEFAULT_WEIGHT ),
  587.                                                 EndObject, FixMinHeight,
  588.                                         EndMember,
  589.                                         StartMember,
  590.                                                 HGroupObject, NeXTFrame, FrameTitle( "Free size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  591.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH,     ButtonFrame, EndObject, EndMember,
  592.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE,     ButtonFrame, EndObject, EndMember,
  593.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK,   ButtonFrame, EndObject, EndMember,
  594.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP,       ButtonFrame, EndObject, EndMember,
  595.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP,    ButtonFrame, EndObject, EndMember,
  596.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN,  ButtonFrame, EndObject, EndMember,
  597.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT,  ButtonFrame, EndObject, EndMember,
  598.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, EndMember,
  599.                                                 EndObject,
  600.                                         EndMember,
  601.                                 EndObject,
  602.                 EndObject;
  603.         }
  604.  
  605.         /*
  606.         **      Object OK?
  607.         **/
  608.         if ( WA_Image ) {
  609.                 /*
  610.                 **      Open the window.
  611.                 **/
  612.                 if ( window = WindowOpen( WA_Image ))
  613.                         /*
  614.                         **      Obtain signal mask.
  615.                         **/
  616.                         GetAttr( WINDOW_SigMask, WA_Image, sigmask );
  617.         }
  618.  
  619.         return( window );
  620. }
  621.  
  622. /*
  623. **      The BackFill hook to show custom backfills.
  624. **      Renders a small mandel in the frame area. Not
  625. **      really useful but it shows you what is possible.
  626. **
  627. **      Code nicked from the "IntMandel.e" source of the
  628. **      Amiga E v3.0 distribution.
  629. **/
  630. #ifdef _DCC
  631. __geta4 ULONG BackFillHook( __A0 struct Hook *hook, __A2 Object *imo, __A1 struct FrameDrawMsg *fdm )
  632. #else
  633. __saveds __asm ULONG BackFillHook( register __a0 struct Hook         *hook,
  634.                                    register __a2 Object              *imo,
  635.                                    register __a1 struct FrameDrawMsg *fdm )
  636. #endif
  637. {
  638.         LONG    zr, zi, ar, ai, dr, di, sr, si, st, x, y, i;
  639.         LONG    xsize, ysize, depth;
  640.  
  641.         if ( fdm->fdm_DrawInfo ) {
  642.  
  643.                 depth = fdm->fdm_DrawInfo->dri_Depth;
  644.                 xsize = fdm->fdm_Bounds->MaxX - fdm->fdm_Bounds->MinX + 1;
  645.                 ysize = fdm->fdm_Bounds->MaxY - fdm->fdm_Bounds->MinY + 1;
  646.  
  647.                 sr = 0x400000 / xsize;
  648.                 si = 0x300000 / ysize;
  649.                 st = 0x140000 * -2;
  650.                 zi = 0x180000;
  651.  
  652.                 for ( y = ysize - 1; y >= 0; y-- ) {
  653.                         zi -= si;
  654.                         zr = st;
  655.                         for ( x = 0; x < xsize; x++ ) {
  656.                                 i = 0;
  657.                                 ar = zr;
  658.                                 ai = zi;
  659.                                 do {
  660.                                         dr = ar >> 10;
  661.                                         di = ai >> 10;
  662.                                         ai = dr * 2 * di + zi;
  663.                                         dr *= dr;
  664.                                         di *= di;
  665.                                         ar = dr - di + zr;
  666.                                         i++;
  667.                                 } while (( i <= 25 ) && (( dr + di ) <= 0x400000 ));
  668.                                 SetAPen( fdm->fdm_RPort, i % ( 1 << depth ));
  669.                                 WritePixel( fdm->fdm_RPort, x + fdm->fdm_Bounds->MinX, y + fdm->fdm_Bounds->MinY );
  670.                                 zr += sr;
  671.                         }
  672.                 }
  673.         }
  674.         return( FRC_OK );
  675. }
  676.  
  677. /*
  678. **      The hook structure.
  679. **/
  680. struct Hook BackFill = {
  681.         NULL, NULL, (HOOKFUNC)BackFillHook, NULL, NULL
  682. };
  683.  
  684. /*
  685. **      Open back-fill window.
  686. **/
  687. struct Window *OpenFillWindow( ULONG *sigmask )
  688. {
  689.         struct Window                   *window = NULL;
  690.  
  691.         /*
  692.         **      Not yet created?
  693.         **/
  694.         if ( ! WA_BFill ) {
  695.                 WA_BFill = WindowObject,
  696.                         WINDOW_Title,           "BGUI back fill patterns",
  697.                         WINDOW_RMBTrap,         TRUE,
  698.                         WINDOW_SmartRefresh,    TRUE,
  699.                         WINDOW_HelpText,        BackfillHelp,
  700.                         WINDOW_NoBufferRP,      TRUE,
  701.                         WINDOW_ScaleWidth,      50,
  702.                         WINDOW_ScaleHeight,     50,
  703.                         WINDOW_MasterGroup,
  704.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  705.                                         StartMember,
  706.                                                 HGroupObject, Spacing( 4 ),
  707.                                                         StartMember, InfoObject, ButtonFrame, ShineRaster,  EndObject, EndMember,
  708.                                                         StartMember, InfoObject, ButtonFrame, ShadowRaster, EndObject, EndMember,
  709.                                                 EndObject,
  710.                                         EndMember,
  711.                                         StartMember,
  712.                                                 HGroupObject, Spacing( 4 ),
  713.                                                         StartMember, InfoObject, ButtonFrame, ShineShadowRaster, EndObject, EndMember,
  714.                                                         StartMember, InfoObject, ButtonFrame, FillRaster,        EndObject, EndMember,
  715.                                                 EndObject,
  716.                                         EndMember,
  717.                                         StartMember,
  718.                                                 HGroupObject, Spacing( 4 ),
  719.                                                         StartMember, InfoObject, ButtonFrame, ShineFillRaster,  EndObject, EndMember,
  720.                                                         StartMember, InfoObject, ButtonFrame, ShadowFillRaster, EndObject, EndMember,
  721.                                                 EndObject,
  722.                                         EndMember,
  723.                                         StartMember,
  724.                                                 HGroupObject, Spacing( 4 ),
  725.                                                         StartMember, InfoObject, ButtonFrame, ShineBlock,  EndObject, EndMember,
  726.                                                         StartMember, InfoObject, ButtonFrame, ShadowBlock, EndObject, EndMember,
  727.                                                 EndObject,
  728.                                         EndMember,
  729.                                         StartMember, InfoObject, ButtonFrame, FRM_BackFillHook, &BackFill, EndObject, Weight( 200 ), EndMember,
  730.                                 EndObject,
  731.                 EndObject;
  732.         }
  733.  
  734.         /*
  735.         **      Object OK?
  736.         **/
  737.         if ( WA_BFill ) {
  738.                 /*
  739.                 **      Open window.
  740.                 **/
  741.                 if ( window = WindowOpen( WA_BFill ))
  742.                         /*
  743.                         **      Obtain signal mask.
  744.                         **/
  745.                         GetAttr( WINDOW_SigMask, WA_BFill, sigmask );
  746.         }
  747.  
  748.         return( window );
  749. }
  750.  
  751. /*
  752. **      Cycle and Mx labels.
  753. **/
  754. UBYTE *PageLab[] = { "Buttons", "Strings", "CheckBoxes", "Radio-Buttons", NULL };
  755. UBYTE *MxLab[]   = { "MX #1",   "MX #2",   "MX #3",      "MX #4",         NULL };
  756.  
  757. /*
  758. **      Cycle to Page map-list.
  759. **/
  760. ULONG Cyc2Page[] = { CYC_Active, PAGE_Active, TAG_END };
  761.  
  762. /*
  763. **      Create a MX object with a title on top.
  764. **/
  765. #define MxGadget(label,labels)\
  766.         MxObject,\
  767.                 GROUP_Style,            GRSTYLE_VERTICAL,\
  768.                 LAB_Label,              label,\
  769.                 LAB_Place,              PLACE_ABOVE,\
  770.                 LAB_Underscore,         '_',\
  771.                 LAB_Highlight,          TRUE,\
  772.                 MX_Labels,              labels,\
  773.                 MX_LabelPlace,          PLACE_LEFT,\
  774.         EndObject, FixMinSize
  775.  
  776. /*
  777. **      Open pages window.
  778. **/
  779. struct Window *OpenPagesWindow( ULONG *sigmask )
  780. {
  781.         Object                          *c, *p, *m, *s1, *s2, *s3;
  782.         struct Window                   *window = NULL;
  783.  
  784.         /*
  785.         **      Not yet created?
  786.         **/
  787.         if ( ! WA_Pages ) {
  788.                 WA_Pages = WindowObject,
  789.                         WINDOW_Title,           "BGUI pages",
  790.                         WINDOW_RMBTrap,         TRUE,
  791.                         WINDOW_SmartRefresh,    TRUE,
  792.                         WINDOW_HelpText,        PagesHelp,
  793.                         WINDOW_MasterGroup,
  794.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  795.                                         StartMember, c = XenKeyPopCycle( "_Page:", PageLab, 0, 0 ), FixMinHeight, EndMember,
  796.                                         StartMember,
  797.                                                 p = PageObject,
  798.                                                         /*
  799.                                                         **      Button page.
  800.                                                         **/
  801.                                                         PageMember,
  802.                                                                 VGroupObject, Spacing(4),
  803.                                                                         StartMember, TitleSeperator( "Buttons" ), EndMember,
  804.                                                                         VarSpace( DEFAULT_WEIGHT ),
  805.                                                                         StartMember, XenButton( "Button #1", 0 ), FixMinHeight, EndMember,
  806.                                                                         StartMember, XenButton( "Button #2", 0 ), FixMinHeight, EndMember,
  807.                                                                         StartMember, XenButton( "Button #3", 0 ), FixMinHeight, EndMember,
  808.                                                                         VarSpace( DEFAULT_WEIGHT ),
  809.                                                                 EndObject,
  810.                                                         /*
  811.                                                         **      String page.
  812.                                                         **/
  813.                                                         PageMember,
  814.                                                                 VGroupObject, Spacing(4),
  815.                                                                         StartMember, TitleSeperator( "Strings" ), EndMember,
  816.                                                                         VarSpace( DEFAULT_WEIGHT ),
  817.                                                                         StartMember, s1 = String( "String #1", "", 256, 0 ), FixMinHeight, EndMember,
  818.                                                                         StartMember, s2 = String( "String #2", "", 256, 0 ), FixMinHeight, EndMember,
  819.                                                                         StartMember, s3 = String( "String #3", "", 256, 0 ), FixMinHeight, EndMember,
  820.                                                                         VarSpace( DEFAULT_WEIGHT ),
  821.                                                                 EndObject,
  822.                                                         /*
  823.                                                         **      CheckBox page.
  824.                                                         **/
  825.                                                         PageMember,
  826.                                                                 VGroupObject, Spacing(4),
  827.                                                                         StartMember, TitleSeperator( "CheckBoxes" ), EndMember,
  828.                                                                         StartMember,
  829.                                                                                 HGroupObject, Spacing( 4 ),
  830.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  831.                                                                                         StartMember,
  832.                                                                                                 VGroupObject, Spacing( 4 ),
  833.                                                                                                         VarSpace( DEFAULT_WEIGHT ),
  834.                                                                                                         StartMember, CheckBox( "CheckBox #1", FALSE, 0 ), EndMember,
  835.                                                                                                         StartMember, CheckBox( "CheckBox #2", FALSE, 0 ), EndMember,
  836.                                                                                                         StartMember, CheckBox( "CheckBox #3", FALSE, 0 ), EndMember,
  837.                                                                                                         VarSpace( DEFAULT_WEIGHT ),
  838.                                                                                                 EndObject, FixMinWidth,
  839.                                                                                         EndMember,
  840.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  841.                                                                                 EndObject,
  842.                                                                         EndMember,
  843.                                                                 EndObject,
  844.                                                         /*
  845.                                                         **      Mx page.
  846.                                                         **/
  847.                                                         PageMember,
  848.                                                                 VGroupObject, Spacing(4),
  849.                                                                         StartMember, TitleSeperator( "Radio-Buttons" ), EndMember,
  850.                                                                         VarSpace( DEFAULT_WEIGHT ),
  851.                                                                         StartMember,
  852.                                                                                 HGroupObject,
  853.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  854.                                                                                         StartMember, m = MxGadget( "_Mx Object", MxLab ), EndMember,
  855.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  856.                                                                                 EndObject, FixMinHeight,
  857.                                                                         EndMember,
  858.                                                                         VarSpace( DEFAULT_WEIGHT ),
  859.                                                                 EndObject,
  860.                                                 EndObject,
  861.                                         EndMember,
  862.                                 EndObject,
  863.                 EndObject;
  864.  
  865.                 /*
  866.                 **      Object OK?
  867.                 **/
  868.                 if ( WA_Pages ) {
  869.                         /*
  870.                         **      Add key for the MX object.
  871.                         **/
  872.                         GadgetKey( WA_Pages, m, "m" );
  873.                         /*
  874.                         **      Connect the cycle to the page.
  875.                         **/
  876.                         AddMap( c, p, Cyc2Page );
  877.                         /*
  878.                         **      Set tab-cycling order.
  879.                         **/
  880.                         DoMethod( WA_Pages, WM_TABCYCLE_ORDER, s1, s2, s3, NULL );
  881.                         /*
  882.                         **      Add a key to the cycle object.
  883.                         **/
  884.                         GadgetKey( WA_Pages, c, "p" );
  885.                 }
  886.         }
  887.  
  888.         /*
  889.         **      Object OK?
  890.         **/
  891.         if ( WA_Pages ) {
  892.                 /*
  893.                 **      Open the window.
  894.                 **/
  895.                 if ( window = WindowOpen( WA_Pages ))
  896.                         /*
  897.                         **      Obtain signal mask.
  898.                         **/
  899.                         GetAttr( WINDOW_SigMask, WA_Pages, sigmask );
  900.         }
  901.  
  902.         return( window );
  903. }
  904.  
  905. /*
  906. **      Main entry.
  907. **/
  908. void main( int argc, char *argv[] )
  909. {
  910.         struct Window          *main = NULL, *groups = NULL, *notif = NULL, *info = NULL, *image = NULL, *bfill = NULL, *pages = NULL;
  911.         struct AppMessage      *apm;
  912.         struct WBArg           *ap;
  913.         ULONG                   mainsig = 0L, groupssig = 0L, notifsig = 0L, infosig = 0L, imagesig = 0L, bfillsig = 0L, pagessig = 0L, appsig = 0L;
  914.         ULONG                   sigmask = 0L, sigrec, rc, i;
  915.         BOOL                    running = TRUE;
  916.         UBYTE                   name[ 256 ];
  917.  
  918.         /*
  919.         **      Open the main window.
  920.         **/
  921.         if ( main = OpenMainWindow( &mainsig, &appsig )) {
  922.                 /*
  923.                 **      OR signal masks.
  924.                 **/
  925.                 sigmask |= mainsig | appsig;
  926.                 /*
  927.                 **      Loop...
  928.                 **/
  929.                 do {
  930.                         /*
  931.                         **      Wait for the signals to come.
  932.                         **/
  933.                         sigrec = Wait( sigmask );
  934.                         /*
  935.                         **      AppWindow signal?
  936.                         **/
  937.                         if ( sigrec & appsig ) {
  938.                                 /*
  939.                                 **      Obtain AppWindow messages.
  940.                                 **/
  941.                                 while ( apm = GetAppMsg( WA_Main )) {
  942.                                         /*
  943.                                         **      Get all dropped icons.
  944.                                         **/
  945.                                         for ( ap = apm->am_ArgList, i = 0; i < apm->am_NumArgs; i++, ap++ ) {
  946.                                                 /*
  947.                                                 **      Build fully qualified name.
  948.                                                 **/
  949.                                                 NameFromLock( ap->wa_Lock, name, 256 );
  950.                                                 AddPart( name, ap->wa_Name, 256 );
  951.                                                 /*
  952.                                                 **      Add it to the listview.
  953.                                                 **/
  954.                                                 AddEntry( main, LV_IconList, (APTR)name, LVAP_SORTED );
  955.                                         }
  956.                                         /*
  957.                                         **      Important! We must reply the message!
  958.                                         **/
  959.                                         ReplyMsg(( struct Message * )apm );
  960.                                 }
  961.                                 /*
  962.                                 **      Switch to the Icon page.
  963.                                 **/
  964.                                 SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 1, TAG_END );
  965.                         }
  966.  
  967.                         /*
  968.                         **      Main window signal?
  969.                         **/
  970.                         if ( sigrec & mainsig ) {
  971.                                 /*
  972.                                 **      Call the main-window event handler.
  973.                                 **/
  974.                                 while (( rc = HandleEvent( WA_Main )) != WMHI_NOMORE ) {
  975.                                         switch ( rc ) {
  976.  
  977.                                                 case    WMHI_CLOSEWINDOW:
  978.                                                 case    ID_QUIT:
  979.                                                         running = FALSE;
  980.                                                         break;
  981.  
  982.                                                 case    ID_ABOUT:
  983.                                                         Req( main, "OK", "\33c\33b\33d8BGUIDemo\33n\33d2\n(C) Copyright 1993-1994 Jaba Development" );
  984.                                                         break;
  985.  
  986.                                                 case    ID_MAIN_GROUPS:
  987.                                                         /*
  988.                                                         **      Open groups window.
  989.                                                         **/
  990.                                                         if ( ! groups ) {
  991.                                                                 if ( groups = OpenGroupsWindow( &groupssig ))
  992.                                                                         sigmask |= groupssig;
  993.                                                         }
  994.                                                         break;
  995.  
  996.                                                 case    ID_MAIN_NOTIF:
  997.                                                         /*
  998.                                                         **      Open notification window.
  999.                                                         **/
  1000.                                                         if ( ! notif ) {
  1001.                                                                 if ( notif = OpenNotifWindow( ¬ifsig ))
  1002.                                                                         sigmask |= notifsig;
  1003.                                                         }
  1004.                                                         break;
  1005.  
  1006.                                                 case    ID_MAIN_INFO:
  1007.                                                         /*
  1008.                                                         **      Open infoclass window.
  1009.                                                         **/
  1010.                                                         if ( ! info ) {
  1011.                                                                 if ( info = OpenInfoWindow( &infosig ))
  1012.                                                                         sigmask |= infosig;
  1013.                                                         }
  1014.                                                         break;
  1015.  
  1016.                                                 case    ID_MAIN_IMAGE:
  1017.                                                         /*
  1018.                                                         **      Open images window.
  1019.                                                         **/
  1020.                                                         if ( ! image ) {
  1021.                                                                 if ( image = OpenImageWindow( &imagesig ))
  1022.                                                                         sigmask |= imagesig;
  1023.                                                         }
  1024.                                                         break;
  1025.  
  1026.                                                 case    ID_MAIN_BFILL:
  1027.                                                         /*
  1028.                                                         **      Open backfill window.
  1029.                                                         **/
  1030.                                                         if ( ! bfill ) {
  1031.                                                                 if ( bfill = OpenFillWindow( &bfillsig ))
  1032.                                                                         sigmask |= bfillsig;
  1033.                                                         }
  1034.                                                         break;
  1035.  
  1036.                                                 case    ID_MAIN_PAGES:
  1037.                                                         /*
  1038.                                                         **      Open pages window.
  1039.                                                         **/
  1040.                                                         if ( ! pages ) {
  1041.                                                                 if ( pages = OpenPagesWindow( &pagessig ))
  1042.                                                                         sigmask |= pagessig;
  1043.                                                         }
  1044.                                                         break;
  1045.  
  1046.                                                 case    ID_MAIN_ICON_CONT:
  1047.                                                         /*
  1048.                                                         **      Switch back to the main page.
  1049.                                                         **/
  1050.                                                         SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 0, TAG_END );
  1051.                                                         /*
  1052.                                                         **      Clear all entries from the listview.
  1053.                                                         **/
  1054.                                                         ClearList( main, LV_IconList );
  1055.                                                         break;
  1056.                                         }
  1057.                                 }
  1058.                         }
  1059.  
  1060.                         /*
  1061.                         **      The code below will close the
  1062.                         **      specific window.
  1063.                         **/
  1064.                         if ( sigrec & groupssig ) {
  1065.                                 while (( rc = HandleEvent( WA_Groups )) != WMHI_NOMORE ) {
  1066.                                         switch ( rc ) {
  1067.                                                 case    WMHI_CLOSEWINDOW:
  1068.                                                         WindowClose( WA_Groups );
  1069.                                                         sigmask &= ~groupssig;
  1070.                                                         groupssig = 0L;
  1071.                                                         groups = NULL;
  1072.                                                         break;
  1073.                                         }
  1074.                                 }
  1075.                         }
  1076.  
  1077.                         if ( sigrec & notifsig ) {
  1078.                                 while (( rc = HandleEvent( WA_Notif )) != WMHI_NOMORE ) {
  1079.                                         switch ( rc ) {
  1080.                                                 case    WMHI_CLOSEWINDOW:
  1081.                                                         WindowClose( WA_Notif );
  1082.                                                         sigmask &= ~notifsig;
  1083.                                                         notifsig = 0L;
  1084.                                                         notif = NULL;
  1085.                                                         break;
  1086.                                         }
  1087.                                 }
  1088.                         }
  1089.  
  1090.                         if ( sigrec & infosig ) {
  1091.                                 while (( rc = HandleEvent( WA_Info )) != WMHI_NOMORE ) {
  1092.                                         switch ( rc ) {
  1093.                                                 case    WMHI_CLOSEWINDOW:
  1094.                                                         WindowClose( WA_Info );
  1095.                                                         sigmask &= ~infosig;
  1096.                                                         infosig = 0L;
  1097.                                                         info = NULL;
  1098.                                                         break;
  1099.                                         }
  1100.                                 }
  1101.                         }
  1102.  
  1103.                         if ( sigrec & imagesig ) {
  1104.                                 while (( rc = HandleEvent( WA_Image )) != WMHI_NOMORE ) {
  1105.                                         switch ( rc ) {
  1106.                                                 case    WMHI_CLOSEWINDOW:
  1107.                                                         WindowClose( WA_Image );
  1108.                                                         sigmask &= ~imagesig;
  1109.                                                         imagesig = 0L;
  1110.                                                         image = NULL;
  1111.                                                         break;
  1112.                                         }
  1113.                                 }
  1114.                         }
  1115.  
  1116.                         if ( sigrec & bfillsig ) {
  1117.                                 while (( rc = HandleEvent( WA_BFill )) != WMHI_NOMORE ) {
  1118.                                         switch ( rc ) {
  1119.                                                 case    WMHI_CLOSEWINDOW:
  1120.                                                         WindowClose( WA_BFill );
  1121.                                                         sigmask &= ~bfillsig;
  1122.                                                         bfillsig = 0L;
  1123.                                                         bfill = NULL;
  1124.                                                         break;
  1125.                                         }
  1126.                                 }
  1127.                         }
  1128.  
  1129.                         if ( sigrec & pagessig ) {
  1130.                                 while (( rc = HandleEvent( WA_Pages )) != WMHI_NOMORE ) {
  1131.                                         switch ( rc ) {
  1132.                                                 case    WMHI_CLOSEWINDOW:
  1133.                                                         WindowClose( WA_Pages );
  1134.                                                         sigmask &= ~pagessig;
  1135.                                                         pagessig = 0L;
  1136.                                                         pages = NULL;
  1137.                                                         break;
  1138.                                         }
  1139.                                 }
  1140.                         }
  1141.                 } while ( running );
  1142.         }
  1143.         /*
  1144.         **      Dispose of all window objects.
  1145.         **/
  1146.         if ( WA_Pages )         DisposeObject( WA_Pages );
  1147.         if ( WA_BFill )         DisposeObject( WA_BFill );
  1148.         if ( WA_Image )         DisposeObject( WA_Image );
  1149.         if ( WA_Info )          DisposeObject( WA_Info );
  1150.         if ( WA_Notif )         DisposeObject( WA_Notif );
  1151.         if ( WA_Groups )        DisposeObject( WA_Groups );
  1152.         if ( WA_Main )          DisposeObject( WA_Main );
  1153. }
  1154.  
  1155. /*
  1156. **      DICE stuff.
  1157. **/
  1158. #ifdef _DCC
  1159. int wbmain( struct WBStartup *wbs )
  1160. {
  1161.         return( main( 0, NULL ));
  1162. }
  1163. #endif
  1164.  
  1165. /*
  1166.  *      $Log: bguidemo.c,v $
  1167.  * Revision 1.13  1994/10/23  15:03:57  jaba
  1168.  * Added some more examples.
  1169.  *
  1170.  * Revision 1.12  1994/10/02  14:57:30  jaba
  1171.  * Added online-help to all windows.
  1172.  *
  1173.  * Revision 1.11  1994/09/29  20:14:37  jaba
  1174.  * Cleaned it up a little.
  1175.  *
  1176.  * Revision 1.10  1994/09/29  18:35:54  jaba
  1177.  * Enhanced the icon-drop thinggy.
  1178.  *
  1179.  * Revision 1.9  1994/08/03  11:16:20  jaba
  1180.  * Switch to proto/ instead of clib/.
  1181.  *
  1182.  * Revision 1.8  1994/07/25  20:08:47  jaba
  1183.  * Added some group seperators.
  1184.  *
  1185.  * Revision 1.7  1994/07/19  19:52:25  jaba
  1186.  * Fixed a positioning bug in the pages window.
  1187.  *
  1188.  * Revision 1.6  1994/07/18  17:44:16  jaba
  1189.  * Removed the sizing gadget from the main window.
  1190.  *
  1191.  * Revision 1.5  1994/07/16  18:21:04  jaba
  1192.  * Added the BREQF_XEN_BUTTONS flag to the BGUI_RequestA() routine.
  1193.  *
  1194.  * Revision 1.4  1994/07/16  18:04:39  jaba
  1195.  * Added a backfill pattern in the main-window.
  1196.  *
  1197.  * Revision 1.3  1994/07/16  13:16:37  jaba
  1198.  * Added a Free chip&fast display to the InfoClass window
  1199.  * to show the possibility of C-style formatting codes in
  1200.  * an InfoClass object.
  1201.  *
  1202.  * Revision 1.2  1994/07/16  12:17:38  jaba
  1203.  * Added some more XEN stuff.
  1204.  *
  1205.  * Revision 1.1  1994/07/16  11:09:12  jaba
  1206.  * Initial revision
  1207.  *
  1208.  */
  1209.